<?php
/**
 * 服务层基础控制器
 * @author maniac
 */
namespace app\common\service;


use app\common\model\Zoning;
class Base
{    
    /**
     * 查询一条记录
     * @param  object  $where 查询条件
     * @param  object  $field 要查询的字段
     * @param  string  $order 排序条件
     */
    public function one($where = '', $field = true, $order = 'id DESC')
    {
        $model = 'app\common\model\\' . request()->controller();
        return $model::field($field)->where($where)->order($order)->find();
    }
    /**
     * 查询多行记录
     * @param  array  $where 查询条件
     * @param  string $field 查询字段
     * @param  string $order 排序条件
     * @param  string $limit 限制数量
     * @return array
     */
    public static function rowss($where = [], $field = '', $order = '', $limit = '')
    {
        // 获取模型
        $model = static::getModel();
        $field = static::getField($field);
        $order = static::getOrder($order);
        if (request()->module() != 'manage') {
            $key  = md5(basename(static::class) . (is_array($where) ? serialize($where) : '') . $field . $order . $limit);
            $data = Cache::get($key);
            if (!$data) {
                $data = $model::field($field)->where($where)->order($order)->limit($limit)->select();

                $tag  = substr(basename(static::class), strrpos(basename(static::class), "\\") + 1);
                Cache::tag($tag)->set($key, $data);
            }
            return $data;
        }
        return $model::field($field)->where($where)->order($order)->limit($limit)->select();
    }


    /**

     * 查询多行记录

     * @param  array  $where 查询条件

     * @param  string $field 查询字段

     * @param  string $order 排序条件

     * @param  string $limit 限制数量

     * @return array

     */

    public static function rows($where = [], $field = '', $order = '', $limit = '')
    {
        // 获取模型
        // $model = static::getModel();
        $model=new Zoning; 
        // $field = static::getField($field);
        // $order = static::getOrder($order);
        if (request()->module() != 'manage') {
            $key  = md5(basename(static::class) . (is_array($where) ? serialize($where) : '') . $field . $order . $limit);
            $data = Cache::get($key);
            if (!$data) {
                $data = $model::field(true)->where($where)->limit($limit)->select();


                $tag  = substr(basename(static::class), strrpos(basename(static::class), "\\") + 1);
                Cache::tag($tag)->set($key, $data);
            }
            return $data;
        }
        return $model::field(true)->where($where)->limit($limit)->select();
    }
    /**
     * 获取模型
     * @return string
     */
    protected static function getModel()
    {
        return '\\'.str_replace('service', 'model', static::class);
    }

    /**
     * 获取查询字段
     * @param  string $field 查询字段
     * @return string
     */
    protected static function getField($field)
    {
        return $field ?: (property_exists(static::class, 'field') ? static::$field : true);
    }

    /**
     * 获取排序条件
     * @param  string $order 排序条件
     * @return string
     */
    protected static function getOrder($order)
    {
        return $order ?: (property_exists(static::class, 'order') ? static::$order : 'id ASC');
    }



}
